#
# TTL隐写
# IP报文在路由间穿梭的时候每经过一个路由，TTL就会减1，当TTL为0的时候，该报文就会被丢弃。
# TTL所占的位数是8位，也就是0 - 255
# 的范围，但是在大多数情况下通常只需要经过很小的跳数就能完成报文的转发，
# 远远比上限255小得多，所以我们可以用TTL值的前两位来进行传输隐藏数据。
# 如：须传送H字符，只需把H字符换成二进制，每两位为一组，每次填充到TTL字段的开头两位并把剩下的6位设置为1（xx111111），这样发4个IP报文即可传送1个字节。
# 根据上述规则，可以知道TTL隐写中用到四个值：00 111111（63）,01 111111（127）,10 111111（191）,11 111111（255）,解密的时候只取前两位，然后转换成ascii
# 简化一下，可以这么认为：
# 用
#
# 00 替换 63
# 01 替换 127
# 10 替换 191
# 11 替换 255

from tqdm import tqdm

a=""
with open("attachment-2.txt","r") as f:
    for i in tqdm(f.readlines()):
        if "63" == i.strip():
            a+="00"
        if "127"  == i.strip():
            a+="01"
        if "191" == i.strip():
            a+="10"
        if "255"  == i.strip():
            a+="11"
import libnum
b=libnum.b2s(a)
with open("1.zip","wb") as f:
    f.write(b)
import base64

with open("2.zip", "wb") as f:
    with open("1.zip", "rb") as f1:
        f.write(base64.b16decode(f1.read().upper()))

